Before emitting "text_caret_moved", change the cursor to the changed
authorLi Yuan <li.yuan@sun.com>
Fri, 6 Jun 2008 03:13:48 +0000 (03:13 +0000)
committerLi Yuan <liyuan@src.gnome.org>
Fri, 6 Jun 2008 03:13:48 +0000 (03:13 +0000)
2008-06-06  Li Yuan  <li.yuan@sun.com>

        * gail/gaillabel.c: (gail_label_real_notify_gtk):
        Before emitting "text_caret_moved", change the cursor to the
        changed bound. Bug #536927.

svn path=/trunk/; revision=20322

modules/other/gail/ChangeLog
modules/other/gail/gaillabel.c

index a4a6536347d9a2bb7dbbcad616be6a33859e150e..3944f975e8916a74d6ed1683da606f0537410955 100644 (file)
@@ -1,3 +1,9 @@
+2008-06-06  Li Yuan  <li.yuan@sun.com>
+
+       * gail/gaillabel.c: (gail_label_real_notify_gtk):
+       Before emitting "text_caret_moved", change the cursor to the
+       changed bound. Bug #536927.
+
 2008-05-30  Michael Natterer  <mitch@imendio.com>
 
        * gailcellparent.h
index a54d637c4e9273700da6a067a46b263eef77177b..3003b52ae52b5e1df1c57d8cae1063bf9b7ca182 100644 (file)
@@ -325,23 +325,35 @@ gail_label_real_notify_gtk (GObject           *obj,
     }
   else if (strcmp (pspec->name, "cursor-position") == 0)
     {
-      gint start, end;
+      gint start, end, tmp;
       gboolean text_caret_moved = FALSE;
       gboolean selection_changed = FALSE;
-      gboolean is_start = TRUE;
 
       gail_obj = G_OBJECT (atk_obj);
       label = GTK_LABEL (widget);
 
+      if (gail_label->selection_bound != -1 && gail_label->selection_bound < gail_label->cursor_position)
+        {
+          tmp = gail_label->selection_bound;
+          gail_label->selection_bound = gail_label->cursor_position;
+          gail_label->cursor_position = tmp;
+        }
+
       if (gtk_label_get_selection_bounds (label, &start, &end))
         {
           if (start != gail_label->cursor_position ||
               end != gail_label->selection_bound)
             {
               if (end != gail_label->selection_bound)
-                is_start = FALSE;
-              gail_label->selection_bound = end;
-              gail_label->cursor_position = start;
+                {
+                  gail_label->selection_bound = start;
+                  gail_label->cursor_position = end;
+                }
+              else
+                {
+                  gail_label->selection_bound = end;
+                  gail_label->cursor_position = start;
+                }
               text_caret_moved = TRUE;
               if (start != end)
                 selection_changed = TRUE;
@@ -358,10 +370,14 @@ gail_label_real_notify_gtk (GObject           *obj,
               if (gail_label->selection_bound != -1 && end != gail_label->selection_bound)
                 {
                   text_caret_moved = TRUE;
-                  is_start = FALSE;
+                  gail_label->cursor_position = end;
+                  gail_label->selection_bound = start;
+                }
+              else
+                {
+                  gail_label->cursor_position = start;
+                  gail_label->selection_bound = end;
                 }
-              gail_label->cursor_position = start;
-              gail_label->selection_bound = end;
             }
           else
             {
@@ -375,7 +391,7 @@ gail_label_real_notify_gtk (GObject           *obj,
         }
         if (text_caret_moved)
           g_signal_emit_by_name (gail_obj, "text_caret_moved", 
-                                 is_start ? gail_label->cursor_position : gail_label->selection_bound);
+                                 gail_label->cursor_position);
         if (selection_changed)
           g_signal_emit_by_name (gail_obj, "text_selection_changed");